aufs4.x-rcN base patch
authorJ. R. Okajima <hooanon05@yahoo.co.jp>
Sat, 21 Nov 2015 01:43:50 +0000 (10:43 +0900)
committerBen Hutchings <ben@decadent.org.uk>
Thu, 17 Mar 2016 01:25:23 +0000 (01:25 +0000)
Patch headers added by debian/patches/features/all/aufs4/gen-patch

aufs4.x-rcN base patch

Gbp-Pq: Topic features/all/aufs4
Gbp-Pq: Name aufs4-base.patch

MAINTAINERS
drivers/block/loop.c
fs/dcache.c
fs/read_write.c
fs/splice.c
include/linux/file.h
include/linux/fs.h
include/linux/splice.h

index d826f1b9eb0270fc3f8e17d674360d769541ec52..65bf152d300369b719baef3154346f520dfca039 100644 (file)
@@ -2029,6 +2029,19 @@ F:       include/linux/audit.h
 F:     include/uapi/linux/audit.h
 F:     kernel/audit*
 
+AUFS (advanced multi layered unification filesystem) FILESYSTEM
+M:     "J. R. Okajima" <hooanon05g@gmail.com>
+L:     linux-unionfs@vger.kernel.org
+L:     aufs-users@lists.sourceforge.net (members only)
+W:     http://aufs.sourceforge.net
+T:     git://github.com/sfjro/aufs4-linux.git
+S:     Supported
+F:     Documentation/filesystems/aufs/
+F:     Documentation/ABI/testing/debugfs-aufs
+F:     Documentation/ABI/testing/sysfs-aufs
+F:     fs/aufs/
+F:     include/uapi/linux/aufs_type.h
+
 AUXILIARY DISPLAY DRIVERS
 M:     Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com>
 W:     http://miguelojeda.es/auxdisplay.htm
index 423f4ca7d712dda6f012c32954f19c9ce3af9d9c..0b816b24b7a6a8d59b98d728247cda68db356e15 100644 (file)
@@ -706,6 +706,24 @@ static inline int is_loop_device(struct file *file)
        return i && S_ISBLK(i->i_mode) && MAJOR(i->i_rdev) == LOOP_MAJOR;
 }
 
+/*
+ * for AUFS
+ * no get/put for file.
+ */
+struct file *loop_backing_file(struct super_block *sb)
+{
+       struct file *ret;
+       struct loop_device *l;
+
+       ret = NULL;
+       if (MAJOR(sb->s_dev) == LOOP_MAJOR) {
+               l = sb->s_bdev->bd_disk->private_data;
+               ret = l->lo_backing_file;
+       }
+       return ret;
+}
+EXPORT_SYMBOL_GPL(loop_backing_file);
+
 /* loop sysfs attributes */
 
 static ssize_t loop_attr_show(struct device *dev, char *page,
index 877bcbbd03ff549a8536bf289dac294f659645b9..6d2bf8dc91f118e067fa4cb35ce570e0b5336afd 100644 (file)
@@ -1156,7 +1156,7 @@ enum d_walk_ret {
  *
  * The @enter() and @finish() callbacks are called with d_lock held.
  */
-static void d_walk(struct dentry *parent, void *data,
+void d_walk(struct dentry *parent, void *data,
                   enum d_walk_ret (*enter)(void *, struct dentry *),
                   void (*finish)(void *))
 {
index 819ef3faf1bb710678175de06a13f4dcf6e90d62..fd0414e1534c7225195b474624edbad813e52d8f 100644 (file)
@@ -494,6 +494,28 @@ ssize_t __vfs_write(struct file *file, const char __user *p, size_t count,
 }
 EXPORT_SYMBOL(__vfs_write);
 
+vfs_readf_t vfs_readf(struct file *file)
+{
+       const struct file_operations *fop = file->f_op;
+
+       if (fop->read)
+               return fop->read;
+       if (fop->read_iter)
+               return new_sync_read;
+       return ERR_PTR(-ENOSYS);
+}
+
+vfs_writef_t vfs_writef(struct file *file)
+{
+       const struct file_operations *fop = file->f_op;
+
+       if (fop->write)
+               return fop->write;
+       if (fop->write_iter)
+               return new_sync_write;
+       return ERR_PTR(-ENOSYS);
+}
+
 ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t *pos)
 {
        mm_segment_t old_fs;
index 4cf700d50b4037e6c334b0647cdb81b816f9ef65..30a091dcd9cd2c7631a94a33ed838ce3b238de32 100644 (file)
@@ -1110,8 +1110,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
 /*
  * Attempt to initiate a splice from pipe to file.
  */
-static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
-                          loff_t *ppos, size_t len, unsigned int flags)
+long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
+                   loff_t *ppos, size_t len, unsigned int flags)
 {
        ssize_t (*splice_write)(struct pipe_inode_info *, struct file *,
                                loff_t *, size_t, unsigned int);
@@ -1127,9 +1127,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
 /*
  * Attempt to initiate a splice from a file to a pipe.
  */
-static long do_splice_to(struct file *in, loff_t *ppos,
-                        struct pipe_inode_info *pipe, size_t len,
-                        unsigned int flags)
+long do_splice_to(struct file *in, loff_t *ppos,
+                 struct pipe_inode_info *pipe, size_t len,
+                 unsigned int flags)
 {
        ssize_t (*splice_read)(struct file *, loff_t *,
                               struct pipe_inode_info *, size_t, unsigned int);
index f87d30882a249d8361425fb668b3f71310832256..9a290b36b9184a9048f3586cb9ad18e67c5a8b90 100644 (file)
@@ -19,6 +19,7 @@ struct dentry;
 struct path;
 extern struct file *alloc_file(struct path *, fmode_t mode,
        const struct file_operations *fop);
+extern struct file *get_empty_filp(void);
 
 static inline void fput_light(struct file *file, int fput_needed)
 {
index 3aa51425416148f5bec14b6faf4e6f4e81370a22..8d4850642611760541e45be517a9f6c714e842eb 100644 (file)
@@ -1672,6 +1672,12 @@ ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
                              struct iovec *fast_pointer,
                              struct iovec **ret_pointer);
 
+typedef ssize_t (*vfs_readf_t)(struct file *, char __user *, size_t, loff_t *);
+typedef ssize_t (*vfs_writef_t)(struct file *, const char __user *, size_t,
+                               loff_t *);
+vfs_readf_t vfs_readf(struct file *file);
+vfs_writef_t vfs_writef(struct file *file);
+
 extern ssize_t __vfs_read(struct file *, char __user *, size_t, loff_t *);
 extern ssize_t __vfs_write(struct file *, const char __user *, size_t, loff_t *);
 extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
index da2751d3b93db503b5572b27e97a0e7cc516fc91..2e0fca67c948c01eb1118ad9c630ac0c7978b6cc 100644 (file)
@@ -83,4 +83,10 @@ extern void splice_shrink_spd(struct splice_pipe_desc *);
 extern void spd_release_page(struct splice_pipe_desc *, unsigned int);
 
 extern const struct pipe_buf_operations page_cache_pipe_buf_ops;
+
+extern long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
+                          loff_t *ppos, size_t len, unsigned int flags);
+extern long do_splice_to(struct file *in, loff_t *ppos,
+                        struct pipe_inode_info *pipe, size_t len,
+                        unsigned int flags);
 #endif